import { defineStore } from "pinia";
import { useUserStore } from "./user";
import { useGlobalStore } from "../global";
// import { hashCode } from "~/utils";
import { serveReport, sendProxy } from "~/api/log";

enum ReportType {
  NetWork = "NetWork", // 网络请求
  Route = "Route", // 路由跳转
  Error = "Error", // 报错误
  Log = "Log", // 日志
  Other = "Other", // 其他
}
interface ReportInfo {
  id?: any; // 唯一 id,用于去重
  time: number; // 时间
  type: ReportType | string; // 上报类型
  data: any; // 上报的数据
}

interface Log {
  storeId: string; // Store初始化完成会生成本次的 id
  createTime: number; //
  list?: any[];
  max: number; // 最大记录数量 默认 50条,基本包含了用户操作的 5 个页面
  debug?: boolean; // 时候开启上报
  router?: any; //
  ignoreDynamics?: any; // 动态增加的过滤信息
  permissionSids: []; // 那些用户可以看到日志等权限
}

/**
 * @description: 记录用户的行为数据
 * 1. 页面加载记录
 * 2. 请求接口记录
 * 3. 报错信息
 */
export const useLogStore = defineStore("useLog", {
  state: (): Log => {
    return {
      storeId: `${Date.now()}-bdc`, // Store初始化完成会生成本次的 id
      createTime: Date.now(), // 创建时间
      list: [],
      debug: true,
      max: 50,
      ignoreDynamics: [],
      permissionSids: [],
    };
  },
  getters: {
    // 用户 sid
    userSid() {
      const u = useUserStore();
      return u.$state.sid || "";
    },
    userToken() {
      const g = useGlobalStore();
      return g.$state.token || "";
    },
    userEmail() {
      const u = useUserStore();
      return u.$state.email || "";
    },
    // 设备类型
    diviceType() {
      const g = useGlobalStore();
      return g.$state.diviceType || "";
    },
    // 数据 id 集合
    listIds(state) {
      return state.list?.map((e) => e.id);
    },
  },
  actions: {
    addIgnores(val: string) {
      if (val && typeof val === "string") this.ignoreDynamics.push(val);
    },
    /**
     * @description: 添加数据
     * @param {string} key 唯一标识
     * @param {any} data
     * @param {number} expTime 过期时间（毫秒）
     * @author: zhj1214
     */
    addInfoToList(val: ReportInfo) {
      /******* 已经使用开发的 sdk 进行上报了,就不需要这里手动的函数了 ******/
      // 0. 过滤掉一些上报
      // if (val.type == "NetWork" && val.data) {
      //   if (
      //     val.data.request === "/servelog" ||
      //     val.data.request === "/getservelog"
      //   ) {
      //     return;
      //   }
      // }
      // // 1. 生成 id,用于去重
      // val.id = hashCode(
      //   `${val.time}${val.type}${JSON.stringify(val.data || "")}`
      // );
      // // 2. 去重
      // if (!this.listIds?.includes(val.id)) {
      //   // 2.1 防止数据过大 上限 this.max 条
      //   if (this.list && this.list.length > this.max) {
      //     this.list.splice(0, 1);
      //   }
      //   this.list?.push(val);
      // }
      // // 3. 遇到错误,上报所有信息
      // if (val.type === ReportType.Error && this.debug) {
      //   // console.log("--上报信息:", this.list);
      //   serveReport({
      //     isServer: process.server,
      //     storeId: this.storeId,
      //     createTime: this.createTime,
      //     list: this.list,
      //     userSid: this.userSid,
      //     email: this.userEmail,
      //     token: this.userToken,
      //     diviceType: this.diviceType,
      //   }).then((res) => {
      //     if (res && process.client) {
      //       if (res.errors > 0) {
      //         const { WEB_NODE_ENV = "prod" } = useRuntimeConfig().public;
      //         if (WEB_NODE_ENV != "dev") {
      //           let text = `${WEB_NODE_ENV}环境,24小时内记录异常${res.errors}条,请点击预览: ${location.origin}/fx/log`;
      //           sendProxy({
      //             body: {
      //               secret: "pw#QHHPx!sk7nzX4",
      //               text,
      //               bot_id: "28:0020fede-30a5-47bc-b88c-53b6e40d54e5",
      //               bot_name: "ops_aod_bot", // 改这里不生效
      //               conversation_id:
      //                 "19:bab5666d53e54c269576c05d2ea2d2d0@thread.v2",
      //               service_url: "https://smba.trafficmanager.net/emea/",
      //             },
      //             url: "https://bot.okmax.vip/api/notify_messages",
      //           });
      //         }
      //       }
      //     }
      //   });
      // }
    },

    /**
     * @description: 根据类型-获取数据
     * @return {*} 数据源
     */
    getPageData(type: ReportType) {
      return this.list?.map((e) => {
        return (e.type = type);
      });
    },
    /**
     * @description: 清空数据
     */
    cleanData() {
      this.list = [];
    },

    /**
     * @description: 客户端发送 teams 消息
     * @param {string} text 消息内容
     * @author: zhj1214
     */
    sendTeamsMsg(text: string) {
      text = `BDC-h5项目(bdc-earlyimport)${process.env.WEB_NODE_ENV}环境;${text}`;
      sendProxy({
        body: {
          secret: "pw#QHHPx!sk7nzX4",
          text,
          bot_id: "28:0020fede-30a5-47bc-b88c-53b6e40d54e5",
          bot_name: "ops_aod_bot", // 改这里不生效
          conversation_id: "19:bab5666d53e54c269576c05d2ea2d2d0@thread.v2",
          service_url: "https://smba.trafficmanager.net/emea/",
        },
        url: "https://bot.okmax.vip/api/notify_messages",
      });
    },
  },
});
